﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
using System.Data;
using Osiptel.CCPP.BE;

namespace Osiptel.CCPP.DL
{
    
    public class DL_SOLICITUD
    {

        public string insertarSolicitud(string tipoSol, string usuario, string motivo)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_SOLICITUD.SP_INSERTAR_SOLICITUD";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pi_TipoSol", OracleType.VarChar);
                    prm1.Direction = ParameterDirection.Input;
                    prm1.Value = tipoSol;
                    cmd.Parameters.Add(prm1);

                    OracleParameter prm2 = new OracleParameter("pi_Usuario", OracleType.VarChar);
                    prm2.Direction = ParameterDirection.Input;
                    prm2.Value = usuario;
                    cmd.Parameters.Add(prm2);

                    OracleParameter prm3 = new OracleParameter("pi_Motivo", OracleType.VarChar);
                    prm3.Direction = ParameterDirection.Input;
                    prm3.Value = motivo;
                    cmd.Parameters.Add(prm3);

                    OracleParameter prm4 = new OracleParameter("po_Retorno", OracleType.Number);
                    prm4.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(prm4);

                    OracleParameter prm5 = new OracleParameter("po_Error", OracleType.VarChar);
                    prm5.Size = 1000;
                    prm5.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(prm5);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        string pvalor = Convert.ToString(cmd.Parameters["po_Retorno"].Value);
                        string error = Convert.ToString(cmd.Parameters["po_Error"].Value);
                        return pvalor;
                    }
                }
            }catch (Exception ex){
                throw ex;
            }
        }

        public string insertarArchivo(string idSol, string archivo,string tamanio,string referencia,string usuario)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_SOLICITUD.SP_INSERTAR_ADJUNTO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pi_IDSolicitud", OracleType.VarChar);
                    prm1.Direction = ParameterDirection.Input;
                    prm1.Value = idSol;
                    cmd.Parameters.Add(prm1);

                    OracleParameter prm2 = new OracleParameter("pi_Archivo", OracleType.VarChar);
                    prm2.Direction = ParameterDirection.Input;
                    prm2.Value = archivo;
                    cmd.Parameters.Add(prm2);

                    OracleParameter prm3 = new OracleParameter("pi_Tamanio", OracleType.VarChar);
                    prm3.Direction = ParameterDirection.Input;
                    prm3.Value = tamanio;
                    cmd.Parameters.Add(prm3);

                    OracleParameter prm4 = new OracleParameter("pi_Referencia", OracleType.VarChar);
                    prm4.Direction = ParameterDirection.Input;
                    prm4.Value = referencia;
                    cmd.Parameters.Add(prm4);

                    OracleParameter prm5 = new OracleParameter("pi_Usuario", OracleType.VarChar);
                    prm5.Direction = ParameterDirection.Input;
                    prm5.Value = usuario;
                    cmd.Parameters.Add(prm5);

                    OracleParameter prm6 = new OracleParameter("po_Retorno", OracleType.Number);
                    prm6.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(prm6);

                    OracleParameter prm7 = new OracleParameter("po_Error", OracleType.VarChar);
                    prm7.Size = 1000;
                    prm7.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(prm7);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        string pvalor = Convert.ToString(cmd.Parameters["po_Retorno"].Value);
                        string error = Convert.ToString(cmd.Parameters["po_Error"].Value);
                        return pvalor;
                    }
                }
            }catch (Exception ex){
                throw ex;
            }
        }


        public List<BE_SOLICITUD> listarSolicitud(string tipoSol, string estado,string fecIni, string fecFin)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_SOLICITUD.SP_LISTAR_SOLICITUD";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("pi_TipoSol", OracleType.VarChar).Value = tipoSol;
                    cmd.Parameters.Add("pi_Estado", OracleType.VarChar).Value = estado;
                    cmd.Parameters.Add("pi_FecIni", OracleType.VarChar).Value = fecIni;
                    cmd.Parameters.Add("pi_FecFin", OracleType.VarChar).Value = fecFin;
                    cmd.Parameters.Add("oListado", OracleType.Cursor).Direction = ParameterDirection.Output;
                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        try
                        {
                            NewConexion.retOpen();
                            cmd.Connection = NewConexion.retConexion();
                            BE_SOLICITUD objConsultaBE;
                            List<BE_SOLICITUD> llstConsultaBE = new List<BE_SOLICITUD>();
                            using (OracleDataReader objDRConsulta = cmd.ExecuteReader())
                            {
                                while (objDRConsulta.Read())
                                {
                                    objConsultaBE = new BE_SOLICITUD();
                                    objConsultaBE.IDSOLICITUD = Convert.ToString(objDRConsulta["IDSOLICITUD"]);
                                    objConsultaBE.NROSOLICITUD = Convert.ToString(objDRConsulta["NROSOLICITUD"]);
                                    objConsultaBE.TIPOSOL = Convert.ToString(objDRConsulta["TIPOSOL"]);
                                    objConsultaBE.DESCTIPOSOL = Convert.ToString(objDRConsulta["DESCTIPOSOL"]);
                                    objConsultaBE.USUSOL = Convert.ToString(objDRConsulta["USUSOL"]);
                                    objConsultaBE.FECSOL = Convert.ToString(objDRConsulta["FECSOL"]);
                                    objConsultaBE.MOTIVO = Convert.ToString(objDRConsulta["MOTIVO"]);
                                    objConsultaBE.FECRPTA = Convert.ToString(objDRConsulta["FECRPTA"]);
                                    objConsultaBE.RESPUESTA = Convert.ToString(objDRConsulta["RESPUESTA"]);
                                    objConsultaBE.ESTADO = Convert.ToString(objDRConsulta["ESTADO"]);
                                    objConsultaBE.USUCRE = Convert.ToString(objDRConsulta["USUCRE"]);
                                    objConsultaBE.FECCRE = Convert.ToString(objDRConsulta["FECCRE"]);
                                    objConsultaBE.USUMOD = Convert.ToString(objDRConsulta["USUMOD"]);
                                    objConsultaBE.FECMOD = Convert.ToString(objDRConsulta["FECMOD"]);
                                    llstConsultaBE.Add(objConsultaBE);
                                }
                                objDRConsulta.Close();
                            }
                            NewConexion.retClose();
                            return llstConsultaBE.ToList();
                        }catch (Exception ex){
                            throw ex;
                        }finally{
                            if (NewConexion.conexion.State == ConnectionState.Open) NewConexion.retClose();
                        }
                    }
                }
            }catch (Exception ex){
                throw ex;
            }
        }

    }

}
